{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## author: coolle 180...:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "k近邻简单的来说就是一种投票选举机制，从程序的角度讲，就是对预测样本，已知数据样本之间逐个求距离，然后截取距离最小的前k个距离，在其覆盖的点域中选择所占百分比最高的标签，即为预测样本的标签。从几何的角度讲就是，对已知数据点进行划分，形成一个个多边形区域，每个区域包含k个点；然后看预测样本点落在哪个区域了。  \n",
    "优点：算法简单易懂，准确度高，自由调整K值，选择适合场景的K值。  \n",
    "缺点：因为采用L2距离，所以特征纬度高，或者样本量特别大的时候，计算量特别大。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## author: Jun"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "k近邻算法：对于预测数据，将其与训练样本进行比较，找到最为相似的k个训练样本，并以这k个训练样本中出现最多的标签作为最终的预测标签。  \n",
    "优点：  \n",
    "      1.简单好用，容易理解，精度高，理论成熟，既可以用来做分类也可以用来做回归；   \n",
    "      2.可用于数值型数据和离散型数据；  \n",
    "      3.训练时间复杂度为O(n)；无数据输入假定；  \n",
    "      4.对异常值不敏感  \n",
    "缺点：  \n",
    "      1.计算复杂度高，空间复杂度高；  \n",
    "      2.样本不平衡问题；  \n",
    "      3.一般数值很大的时候不用这个，计算量太大。但是单个样本又不能太少否则容易发生误分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## author: 沧海一声喵"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "kNN原理：存在一个样本数据集合，也称作训练样本集，并且样本集中每个数据都存在标签，即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后，将新数据的每个特征与样本集中数据对应的特征进行比较，然后算法提取样本集中特征最相似数据（最近邻）的分类标签。一般来说，我们只选择样本数据集中前k个最相似的数据，这就是k-近邻算法中k的出处，通常k是不大于20的整数。最后k个最相似数据中出现次数最多的分类，作为新数据的分类。  \n",
    "优点：   \n",
    "1、思想简单，理论成熟，既可以用来做分类也可以用来做回归；   \n",
    "2、可用于非线性分类；  \n",
    "3、训练时间复杂度为O(n)；   \n",
    "4、准确度高，对数据没有假设，对outlier不敏感；  \n",
    "缺点：  \n",
    "1、计算量大；   \n",
    "2、样本不平衡问题（即有些类别的样本数量很多，而其它样本的数量很少）；  \n",
    "3、需要大量的内存；  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## author：JaAson"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "kNN原理：近朱者赤，近墨者黑。少数服从多数。其中，(1)“远近”是在特征空间中的距离，常用欧氏距离。(2)“朱，墨”是附近的点的属性，或者类别。(3)“服从”是指，在K个临近点中，预测点的属性为其中最多的属性。      \n",
    "优点：(1)没有训练的过程，原理简单，易于实现。(2)对样本空间分布没有要求。    \n",
    "缺点：(1)需要存储所有样本，空间复杂度高。(2)每次预测均需要计算和所有样本点距离，若样本空间维度高，时间复杂度高。(3)距离计算没有侧重，倘若一个维度极差很大，另一个维度极差很小，计算距离会导致掩蔽效应。改进方法是对样本空间各个维度进行类似于白平衡的线性缩放。  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## author: shuaizzZ"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "kNN思想简述：  \n",
    "如果一个待分类样本在特征空间中的k个最相似(即特征空间中K近邻)的样本中的大多数属于某一个类别，则该样本也属于这个类别，即近朱者赤，近墨者黑。显然，对当前待分类样本的分类，需要大量已知分类的样本的支持，因此KNN是一种有监督学习算法。  \n",
    "优点：    \n",
    "    ① 简单，易于理解，易于实现，无需参数估计，无需训练;   \n",
    "    ② 对异常值不敏感（个别噪音数据对结果的影响不是很大）;   \n",
    "    ③ 适合对稀有事件进行分类;   \n",
    "    ④ 适合于多分类问题(multi-modal,对象具有多个类别标签)，KNN要比SVM表现要好;  \n",
    "缺点：  \n",
    "    ① 对测试样本分类时的计算量大，内存开销大，因为对每一个待分类的文本都要计算它到全体已知样本的距离，才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑，事先去除对分类作用不大的样本;   \n",
    "    ② 可解释性差，无法告诉你哪个变量更重要，无法给出决策树那样的规则;   \n",
    "    ③ K值的选择：最大的缺点是当样本不平衡时，如一个类的样本容量很大，而其他类样本容量很小时，有可能导致当输入一个新样本时，该样本的K个邻居中大容量类的样本占多数。该算法只计算“最近的”邻居样本，某一类的样本数量很大，那么或者这类样本并不接近目标样本，或者这类样本很靠近目标样本。无论怎样，数量并不能影响运行结果。可以采用权值的方法（和该样本距离小的邻居权值大）来改进;   \n",
    "    ④ KNN是一种消极学习方法、懒惰算法。  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## author: 皮的开心"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "原理：  \n",
    "样本数据集中每个样本是有标签的，即我们知道样本数据集中每一个样本的分类。当获取到一个没有标签的待分类样本时，将待分类样本与样本数据集中的每一个样本进行比较，找到与当前样本最为相近的K个样本，并获取这K歌样本的标签，最后，选择这k个样本标签中中出现次数最多的分类，作为待分类样本的分类。  \n",
    "优点：  \n",
    " 1.简单，易于理解，易于实现，无需参数估计，无需训练;   \n",
    " 2.适合对稀有事件进行分类;   \n",
    " 3.适合于多分类问题(multi-modal,对象具有多个类别标签)，KNN要比SVM表现要好;  \n",
    "缺点：  \n",
    " 1.对测试样本分类时的计算量大，内存开销大，因为对每一个待分类的文本都要计算它到全体已知样本的距离，才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑，事先去除对分类作用不大的样本;   \n",
    " 2.可解释性差，无法告诉你哪个变量更重要，无法给出决策树那样的规则;     \n",
    " 3.K值的选择：最大的缺点是当样本不平衡时，如一个类的样本容量很大，而其他类样本容量很小时，有可能导致当输入一个新样本时，该样本的K个邻居中大容量类的样本占多数。该算法只计算“最近的”邻居样本，某一类的样本数量很大，那么或者这类样本并不接近目标样本，或者这类样本很靠近目标样本。无论怎样，数量并不能影响运行结果。可以采用权值的方法（和该样本距离小的邻居权值大）来改进;   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## author: sHinnosuki"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "原理：  \n",
    "存在一个数据样本集合，也称做训练样本集合，样本集里面每个数据都有自己的标签(标签可以看做是分类信息)，输入没有标签的新数据后，我们需要知道这个新数据是属于哪一类的，可以将新数据的特征与原来样本数据中的特征进行比较，样本中提取特征最相似的数据,然后算法提取样本集中最相似的数据的标签，一般来说，我们只选择样本集中前k个数据(比如距离未知数据距离最近的前k个数据)，看看这前k个数据中，哪种分类最多，最多的分类便是未知数据的分类。  \n",
    "\n",
    "优点  \n",
    "简单好用，容易理解，精度高，理论成熟，既可以用来做分类也可以用来做回归；  \n",
    "可用于数值型数据和离散型数据；  \n",
    "训练时间复杂度为O(n)；无数据输入假定；  \n",
    "对异常值不敏感。  \n",
    "缺点：  \n",
    "计算复杂性高；空间复杂性高；  \n",
    "样本不平衡问题（即有些类别的样本数量很多，而其它样本的数量很少）；   \n",
    "一般数值很大的时候不用这个，计算量太大。但是单个样本又不能太少，否则容易发生误分。  \n",
    "最大的缺点是无法给出数据的内在含义。  "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
